function initTicketModel(sequelize, DataTypes) {
  const Ticket = sequelize.define('Ticket', {
    // 原有字段（保持不变）
    ticketId: {
      type: DataTypes.INTEGER,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true // 开启自增
    },
    sightId: {
      type: DataTypes.INTEGER,
      allowNull: false,
      references: {
        model: 'sights', // 关联的景点表名
        key: 'sightId'   // 关联的景点表字段
      }
    },
    price: {
      type: DataTypes.FLOAT,
      allowNull: false,
    },
    stock: {
      type: DataTypes.INTEGER,
      allowNull: false,
    },
    desc: {
      type: DataTypes.STRING(255),
      allowNull: false,
    },

    ticketType: {
      type: DataTypes.STRING(50),
      allowNull: false,
      defaultValue: 'adult', // 默认值：成人票
      comment: '门票类型（adult:成人票, child:儿童票, student:学生票, senior:老人票, group:团体票）'
    },

    sourceChannel: {
      type: DataTypes.STRING(50),
      allowNull: false,
      defaultValue: 'official', // 默认值：官方渠道
      comment: '票源渠道（official:官方平台, third_party:第三方平台, agent:代理商, offline:线下窗口）'
    },

    saleStartTime: {
      type: DataTypes.DATE,
      allowNull: false,
      defaultValue: DataTypes.NOW, // 默认值：当前时间（创建时即开启售卖）
      comment: '门票开售时间（开始允许用户购买的时间）'
    },

    saleEndTime: {
      type: DataTypes.DATE,
      allowNull: true, // 允许为null（表示无截止停售时间，长期售卖）
      comment: '门票停售时间（停止售卖的时间，null表示永久售卖）'
    },

    status: {
      type: DataTypes.ENUM('active', 'inactive', 'sold_out', 'stopped'),
      allowNull: false,
      defaultValue: 'active', // 默认值：激活状态（可售卖）
      comment: '门票状态（active:可售卖, inactive:未激活, sold_out:售罄, stopped:已停售）'
    }
  }, {
    tableName: 'tickets', // 数据库表名
    timestamps: true, // 自动添加 createdAt（创建时间）和 updatedAt（更新时间）字段
    comment: '门票表（存储景点门票的基础信息及售卖状态）'
  });
  
  // 定义关联关系（保持不变）
  Ticket.associate = function(models) {
    // 门票属于某个景点（多对一关联）
    Ticket.belongsTo(models.Sight, {
      foreignKey: 'sightId',
      as: 'sight' // 关联别名，查询时可通过 include: 'sight' 关联景点详情
    });
    
    // 一个门票可被多个订单包含（通过中间表 OrderTicket 实现多对多关联）
    Ticket.belongsToMany(models.Order, {
      through: models.OrderTicket,
      foreignKey: 'ticketId',
      otherKey: 'orderId',
      as: 'orders' // 关联别名，查询时可通过 include: 'orders' 关联订单信息
    });
    
    // 一个门票对应多个订单-门票关联记录（一对多关联，关联中间表）
    Ticket.hasMany(models.OrderTicket, {
      foreignKey: 'ticketId',
      as: 'orderTickets' // 关联别名，查询中间表数据
    });
  };
  
  return Ticket;
}

module.exports = initTicketModel;